home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1843 / 1843.xpi / content / firebug / editors.js < prev    next >
Text File  |  2010-01-15  |  7KB  |  212 lines

  1. /* See license.txt for terms of usage */
  2.  
  3. // ************************************************************************************************
  4. // Constants
  5.  
  6. const prefs = fbXPCOMUtils.CCSV("@mozilla.org/preferences-service;1", "nsIPrefBranch");
  7. const names = ["label", "executable", "cmdline", "image"];
  8.  
  9. // ************************************************************************************************
  10. // Globals
  11.  
  12. var gEditorManager =
  13. {
  14.     _tree : null,
  15.     _data : [],
  16.     _removeButton : null,
  17.     _changeButton : null,
  18.  
  19.     init: function()
  20.     {
  21.         var args = window.arguments[0];
  22.         this._FBL = args.FBL;
  23.         this._prefName = args.prefName;
  24.  
  25.         (this._removeButton = document.getElementById("removeEditor")).disabled = true;
  26.         (this._changeButton = document.getElementById("changeEditor")).disabled = true;
  27.  
  28.         this._tree = document.getElementById("editorsList");
  29.  
  30.         this._treeView =
  31.         {
  32.             data: this._data,
  33.             selection: null,
  34.  
  35.             get rowCount() { return this.data.length; },
  36.             getCellText: function(row, column)
  37.             {
  38.                 switch(column.id)
  39.                 {
  40.                 case "editorName":
  41.                     return " "+this.data[row].label;
  42.                 case "editorExecutable":
  43.                     return this.data[row].executable;
  44.                 case "editorParams":
  45.                     return this.data[row].cmdline;
  46.                 }
  47.                 return "";
  48.             },
  49.             setTree: function(treebox){ this.treebox = treebox; },
  50.             isContainer: function(row) { return false; },
  51.             isContainerOpen: function(row) { return false; },
  52.             isContainerEmpty: function(row) { return false; },
  53.             isSeparator: function(row) { return false; },
  54.             isSorted: function() { return false; },
  55.             getLevel: function(row) { return 0; },
  56.             getImageSrc: function(row,column) { return column.id=="editorName" ? this.data[row].image : null; },
  57.             getRowProperties: function(row,props) {},
  58.             getCellProperties: function(row,column,props) {},
  59.             getColumnProperties: function(colid,column,props) {}
  60.         };
  61.  
  62.         this._load();
  63.         this._tree.view = this._treeView;
  64.     },
  65.  
  66.     uninit: function()
  67.     {
  68.     },
  69.  
  70.     onSelectionChanged: function()
  71.     {
  72.         var selection = this._tree.view.selection;
  73.         this._removeButton.disabled = (selection.count != 1);
  74.         this._changeButton.disabled = (selection.count != 1);
  75.     },
  76.  
  77.     addEditorHandler: function()
  78.     {
  79.         var item = { label: "", executable: null, cmdline: "" };
  80.         var result = {};
  81.         var args = {
  82.             item: item,
  83.             FBL: this._FBL
  84.         };
  85.         openDialog("chrome://firebug/content/changeeditor.xul",  "_blank", "modal,centerscreen", args, result);
  86.         if (result.saveChanges)
  87.         {
  88.             item.id = item.label.replace(/\W/g, "_");
  89.             this._saveItem(item);
  90.  
  91.             this._loadItem(item);
  92.             this._data.push(item);
  93.             this._tree.view = this._treeView;
  94.  
  95.             var editors = [];
  96.             try {
  97.                 editors = prefs.getCharPref(this._prefName).split(",");
  98.                 for( var i = 0; i < editors.length; ++i )
  99.                 {
  100.                     if ( editors[i].replace(/^\s+|\s+$/,"") == "" )
  101.                         editors.splice(i, 1);
  102.                 }
  103.             }
  104.             catch(exc)
  105.             {
  106.                 this._FBL.ERROR(exc);
  107.             }
  108.             editors.push(item.id);
  109.             prefs.setCharPref(this._prefName, editors.join(","));
  110.         }
  111.     },
  112.  
  113.     removeEditorHandler: function()
  114.     {
  115.         var selection = this._tree.view.selection;
  116.         if (selection.count < 1)
  117.             return;
  118.         var item = this._data[selection.currentIndex];
  119.         this._data.splice(selection.currentIndex, 1);
  120.         this._tree.view = this._treeView;
  121.  
  122.         try {
  123.             var editors = prefs.getCharPref(this._prefName).split(",");
  124.             this._FBL.remove(editors, item.id);
  125.             prefs.setCharPref(this._prefName, editors.join(","));
  126.             prefs.deleteBranch(this._prefName+"."+item.id);
  127.         }
  128.         catch(exc)
  129.         {
  130.             this._FBL.ERROR(exc);
  131.         }
  132.     },
  133.  
  134.     changeEditorHandler: function()
  135.     {
  136.         var selection = this._tree.view.selection;
  137.         if (selection.count != 1)
  138.             return;
  139.         var item = this._data[selection.currentIndex];
  140.         var args = {
  141.             item: item,
  142.             FBL: this._FBL
  143.         };
  144.         var result = {};
  145.         openDialog("chrome://firebug/content/changeeditor.xul",  "_blank", "modal,centerscreen", args, result);
  146.         if (result.saveChanges)
  147.         {
  148.             this._saveItem(item);
  149.         }
  150.         this._loadItem(item);
  151.         this._tree.view = this._treeView;
  152.     },
  153.  
  154.     _loadItem: function(item)
  155.     {
  156.         const prefName = this._prefName;
  157.         for( var i = 0; i < names.length; ++i )
  158.         {
  159.             try {
  160.                 item[names[i]] = prefs.getCharPref(prefName+"."+item.id+"."+names[i]);
  161.             }
  162.             catch(exc)
  163.             {}
  164.         }
  165.         if (!item.image)
  166.             item.image = this._FBL.getIconURLForFile(item.executable);
  167.     },
  168.  
  169.     _saveItem: function(item)
  170.     {
  171.         if ( item.image && item.image == this._FBL.getIconURLForFile(item.executable) )
  172.             item.image = null;
  173.  
  174.         const prefName = this._prefName;
  175.         for( var i = 0; i < names.length; ++i )
  176.         {
  177.             try {
  178.                 var value = item[names[i]];
  179.                 if ( value )
  180.                     prefs.setCharPref(prefName+"."+item.id+"."+names[i], value);
  181.                 else
  182.                     prefs.clearUserPref(prefName+"."+item.id+"."+names[i]);
  183.             }
  184.             catch(exc)
  185.             {}
  186.         }
  187.     },
  188.  
  189.     _load: function()
  190.     {
  191.         try {
  192.             var list = prefs.getCharPref(this._prefName).split(",");
  193.             for (var i = 0; i < list.length; ++i)
  194.             {
  195.                 var editorId = list[i].replace(/\s/g, "_");
  196.                 if ( !editorId )
  197.                     continue;
  198.                 var item = { id: editorId };
  199.                 this._data.push(item);
  200.                 this._loadItem(item);
  201.             }
  202.         }
  203.         catch(exc)
  204.         {
  205.             this._FBL.ERROR(exc);
  206.         }
  207.     }
  208.  
  209. };
  210.  
  211. // ************************************************************************************************
  212.